# 写出一个函数def functer(var1:list, var2:int), 第一个参数是列表，第二个参数是数字，函数返回一个列表。返回的结果是var1内元素，且能够整除var2

def functer(var1:list, var2:int):
    lst = [x for x in var1 if var2 % x == 0 ]
    return lst

print(functer([2, 3, 4], 9))

# 给定两个字符串，写一个函数，返回这两个字符串中最长的相同部分，例如'knowledge'和'known'相同的最长部分是'know'

# 方法一：
def get_maxlength_samesubstr(str1, str2):
    max_length_str = ''
    for x, y in enumerate(str1):
        for a, b in enumerate(str2):
            if y == b:
                same_str = ''
                index1 = x
                index2 = a
                while index1 < len(str1) and index2 < len(str2) and str1[index1] == str2[index2]:
                    same_str += str1[index1]
                    index1 += 1
                    index2 += 1
                if len(same_str) == len(str1) or len(same_str) == len(str2):
                    max_length_str = same_str
                    return max_length_str
                if len(same_str) > len(max_length_str):
                    max_length_str = same_str
    if max_length_str:
        return max_length_str
    else:
        print('两个字符串没有相同字符')

#  方法二：
def get_maxlength_samesubstr_new(str1, str2):
    max_same_str = ''
    short_str, long_str = (str1, str2) if len(str1) <= len(str2) else (str2, str1)    
    lst = []

    for i in range(len(short_str)):
        sub_str = ''
        sub_str += short_str[i]
        lst.append(sub_str)
        for j in range(i+1, len(short_str)):
            sub_str += short_str[j]
            lst.append(sub_str)

    for s in lst:
        if s in long_str and len(s) > len(max_same_str):
            max_same_str = s
    if max_same_str:
        return max_same_str
    else:
        print('两个字符串没有相同字符')

print(get_maxlength_samesubstr('knowledge', 'known'))
print(get_maxlength_samesubstr_new('knowledge', 'known'))

# 答的都很棒，第二道题目两种解法需要考虑一下如果存在两个相同最长子串的情况